package case1

import (
	"errors"
	"fmt"
)

/** 自定义错误 */

func Test() {

	// 示例1
	case1()

	// 示例2
	case2()
}

// 示例1
func case1() {
	arr1 := []int{1, 37, 4, 2}
	r, e := getMaxVal(arr1)
	fmt.Println(r, e)
	if e != nil {
		fmt.Println(e)
	}

	var arr2 []int
	if r, e := getMaxVal(arr2); e != nil {
		fmt.Println("有错误", e)
		fmt.Println(r)
	}
}

// 获取数组最大值函数
func getMaxVal(nums []int) (int, error) {

	if nums == nil || len(nums) == 0 {
		return 0, errors.New("nums 参数不能为空！")
	}

	maxVal := nums[0]
	for _, v := range nums {
		if v > maxVal {
			maxVal = v
		}
	}
	return maxVal, nil
}

// 示例2
func case2() {
	money := moneyPack{100, ""}
	v, err := money.withdraw(999)
	fmt.Println(v, err)
}

// 定义钱包
type moneyPack struct {
	money float64
	err   string
}

func (e *moneyPack) error() string {
	return fmt.Sprintf("钱包余额不足 %0.2f: %s", e.money, e.err)
}

// 定义取款方法
func (e moneyPack) withdraw(amount float64) (float64, error) {

	if e.money < amount {
		return 0, errors.New("取款失败，钱包金额不足！")
	}

	return e.money - amount, nil
}
